home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1994 June / PC Plus Super CD coverdisc Issue 93 June 1994.iso / install / pindemo / disk1 / setupapi.in_ / setupapi.bin
Encoding:
Text File  |  1993-08-19  |  29.1 KB  |  906 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK          = 0
  23. CONST MB_ICONHAND    = 16
  24. CONST MB_TASKMODAL   = 8192
  25.  
  26.  
  27. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  28. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  31. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  32. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  33. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  34.  
  35.  
  36.  
  37.  
  38. '**************************************************************************
  39. '****************************** Setup Constants ***************************
  40. '**************************************************************************
  41.  
  42.  
  43. ''Command Option Flags
  44.  
  45. CONST cmoVital       = 1
  46. CONST cmoCopy        = 2
  47. CONST cmoUndo        = 4
  48. CONST cmoRoot        = 8
  49. CONST cmoDecompress  = 16
  50. CONST cmoTimeStamp   = 32
  51. CONST cmoReadOnly    = 64
  52. CONST cmoBackup      = 128
  53. CONST cmoForce       = 256
  54. CONST cmoRemove      = 512
  55. CONST cmoOverwrite   = 1024
  56. CONST cmoAppend      = 2048
  57. CONST cmoPrepend     = 4096
  58. CONST cmoNone        = 0
  59. CONST cmoAll         = 65535
  60.  
  61.  
  62. ''File Exist Modes
  63.  
  64. CONST femExists     = 0
  65. CONST femRead       = 1
  66. CONST femWrite      = 2
  67. CONST femReadWrite  = 3
  68.  
  69.  
  70. ''Read-Only Return Code
  71.  
  72. CONST ynrcNo         = 0
  73. CONST ynrcYes        = 1
  74. CONST ynrcErr1       = 2
  75. CONST ynrcErr2       = 3
  76. CONST ynrcErr3       = 4
  77. CONST ynrcErr4       = 5
  78. CONST ynrcErr5       = 6
  79. CONST ynrcErr6       = 7
  80. CONST ynrcErr7       = 8
  81. CONST ynrcErr8       = 9
  82. CONST ynrcErr9       = 10
  83.  
  84.  
  85. ''General Return Codes
  86.  
  87. CONST grcOkay       = 0
  88. CONST grcNotOkay    = 1
  89. CONST grcUserQuit   = 48
  90.  
  91.  
  92. ''Ranges
  93.  
  94. ''CONST cbSymValMax = 8192
  95. CONST cbSymValMax = 512
  96.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  97.     '' but we get Out of String Space wattdrvr error if we alloc
  98.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  99.     '' We should look into using dynamic far alloc instead of
  100.     '' STRING$ for large buffers.
  101.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  102.  
  103.  
  104. ''ON ERROR Error Codes
  105. CONST STFERR      = 1024   ''setup system error
  106. CONST STFQUIT     = 1025   ''user quit
  107.  
  108. CONST scmOff      = 0
  109. CONST scmOnIgnore = 1
  110. CONST scmOnFatal  = 2
  111.  
  112.  
  113. '**************************************************************************
  114. '********************************  Setup API's  ***************************
  115. '**************************************************************************
  116.  
  117. '' common
  118.  
  119. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  120. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  121. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  122. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  123. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  124. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  125. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  126. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  127. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  128. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  129. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  130.  
  131.  
  132. ''shell
  133.  
  134. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  135. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  136. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  137. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  138. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  139. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  140. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  141. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  142. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  143. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  144. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  145. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  146. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  147.  
  148.  
  149. ''shell
  150.  
  151. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  152. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  153. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  154.  
  155.  
  156.  
  157. ''install
  158.  
  159. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  160. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  161. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  162. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  163. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  164. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  165. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  166. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  167. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  168. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  169. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  170. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  171. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  172. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  173. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  174. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  175. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  176. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  177. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  178. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  179. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  180. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  181. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  182. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  183. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  184. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  185. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  186. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  187. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  188.  
  189. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  190.  
  191.  
  192.  
  193. '*************************************************************************
  194. '****************  Setup Basic Wrapper Declarations  *********************
  195. '*************************************************************************
  196.  
  197.  
  198. ''shell
  199.  
  200. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  201. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  202. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  203. DECLARE SUB UIPop (n%)
  204. DECLARE SUB UIPopAll
  205. DECLARE SUB SetTitle (sz$)
  206. DECLARE SUB ReadInfFile (szFile$)
  207. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  208. DECLARE SUB RemoveSymbol (szSym$)
  209. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  210. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  211. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  212. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  213. DECLARE SUB AddListItem(szSymbol$, szItem$)
  214. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  215.  
  216. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  217. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  218.  
  219. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  220. DECLARE SUB RestoreCursor (hPrev%)
  221.  
  222. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  223. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  224.  
  225. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  226. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  227. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  228. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  229.  
  230. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  231. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  232. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  233. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  234.  
  235.  
  236. ''install
  237.  
  238.  
  239. DECLARE SUB CreateDir (szDir$, cmo%)
  240. DECLARE SUB RemoveDir (szDir$, cmo%)
  241. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  242. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  243. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  244. DECLARE SUB CopyFilesInCopyList
  245. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  246. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  247. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  248. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  249. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  250. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  251. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  252. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  253. DECLARE SUB DumpCopyList (szFile$)
  254. DECLARE SUB ClearCopyList
  255. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  256. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  257. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  258. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  259. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  260. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  261. DECLARE SUB InitInstall
  262. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  263. DECLARE SUB AddBlankToBillboardList (lTicks&)
  264. DECLARE SUB ClearBillboardList
  265. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  266. DECLARE SUB CloseLogFile
  267. DECLARE SUB WriteToLogFile (szStr$)
  268. DECLARE SUB SetCopyGaugePosition (x%, y%)
  269. DECLARE SUB SetRestartDir(szDir$)
  270. DECLARE FUNCTION RestartListEmpty AS INTEGER
  271. DECLARE FUNCTION ExitExecRestart AS INTEGER
  272. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  273. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  274. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  275. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  276. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  277.  
  278.  
  279. '' Error Handling
  280.  
  281. '' Windows system detect
  282.  
  283. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  284. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  285. DECLARE FUNCTION GetWindowsMode AS INTEGER
  286. DECLARE FUNCTION GetWindowsDir  AS STRING
  287. DECLARE FUNCTION GetWindowsSysDir AS STRING
  288. DECLARE FUNCTION IsWindowsShared AS INTEGER
  289. DECLARE FUNCTION GetScreenWidth AS INTEGER
  290. DECLARE FUNCTION GetScreenHeight AS INTEGER
  291.  
  292.  
  293. '*************************************************************************
  294. '*****************  Setup Basic Wrapper Definitions  *********************
  295. '*************************************************************************
  296. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  297.     fFrameInit = 0
  298.     fInstallInit = 0
  299.  
  300.     IF hSetup > 0 THEN
  301. '$ifdef DEBUG
  302.         StfApiErr saeInit, "InitSetup", szCmdLine$
  303. '$endif ''DEBUG
  304.     END IF
  305.  
  306.     i% = InitFrame(szCmdLine$)
  307.     fFrameInit = 1
  308.  
  309.     InitInstall
  310.     fInstallInit = 1
  311.  
  312.     InitSetup = i%
  313. END FUNCTION
  314.  
  315.  
  316.  
  317. '**************************************************************************
  318. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  319.     IF hSetup > 0 THEN
  320. '$ifdef DEBUG
  321.         StfApiErr saeInit, "InitFrame", szCmdLine$
  322. '$endif ''DEBUG
  323.     ELSE
  324.         i% = InitializeFrame(szCmdLine$)
  325.         IF i% = -1 THEN
  326.             END   '' NOT an error - Usage (/?) or Command line copy operation
  327.         ELSEIF i% = 0 THEN
  328. '$ifdef DEBUG
  329.             StfApiErr saeFail, "InitFrame", szCmdLine$
  330. '$endif ''DEBUG
  331.             END
  332.         ELSE
  333.             InitFrame = i%
  334.         END IF
  335.     END IF
  336. END FUNCTION
  337.  
  338.  
  339. '**************************************************************************
  340. SUB SetBitmap(szDll$, Bitmap%) STATIC
  341.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  342.         ERROR STFERR
  343.     END IF
  344. END SUB
  345.  
  346.  
  347. '**************************************************************************
  348. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  349.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  350.         ERROR STFERR
  351.     END IF
  352. END SUB
  353.  
  354.  
  355. '*************************************************************************
  356. SUB SetTitle(sz$) STATIC
  357.     SetWindowText HwndFrame(), sz$
  358. END SUB
  359.  
  360.  
  361. '*************************************************************************
  362. SUB ReadInfFile (szFile$) STATIC
  363.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  364.         ERROR STFERR
  365.     END IF
  366. END SUB
  367.  
  368.  
  369. '*************************************************************************
  370. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  371.  
  372.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  373.         ERROR STFERR
  374.     ELSE
  375.         UIStartDlg = GetSymbolValue("DLGEVENT")
  376.     END IF
  377. END FUNCTION
  378.  
  379.  
  380. '*************************************************************************
  381. SUB UIPop (n%) STATIC
  382.     IF FKillNDialogs(n%) = 0 THEN
  383.         ERROR STFERR
  384.     END IF
  385. END SUB
  386.  
  387.  
  388. '*************************************************************************
  389. SUB UIPopAll STATIC
  390.     IF FKillNDialogs(65535) = 0 THEN
  391.         ERROR STFERR
  392.     END IF
  393. END SUB
  394.  
  395.  
  396. '*************************************************************************
  397. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  398.     szValue$ = string$(cbSymValMax,32)
  399.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  400.     GetSymbolValue = szValue$
  401.     IF Length% >= cbSymValMax THEN
  402.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  403.         ERROR STFERR
  404.     END IF
  405.     IF szSymbol$ = "" THEN
  406.         ERROR STFERR
  407.     END IF
  408.     szValue$ = ""
  409. END FUNCTION
  410.  
  411.  
  412. '*************************************************************************
  413. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  414.     GetListLength = UsGetListLength(szSymbol$)
  415.     IF szSymbol$ = "" THEN
  416.         ERROR STFERR
  417.     END IF
  418. END FUNCTION
  419.  
  420.  
  421. '*************************************************************************
  422. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  423.  
  424.     szListItem$ = string$(cbSymValMax,32)
  425.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  426.     GetListItem = szListItem$
  427.     IF Length% >= cbSymValMax THEN
  428.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  429.         ERROR STFERR
  430.     END IF
  431.     IF szListSymbol$ = "" THEN
  432.         ERROR STFERR
  433.     END IF
  434.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  435.         ERROR STFERR
  436.     end if
  437.     szListItem$ = ""
  438. END FUNCTION
  439.  
  440. '*************************************************************************
  441. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  442.     IF iField% < 1 THEN
  443. '$ifdef DEBUG
  444.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  445. '$endif ''DEBUG
  446.         ERROR STFERR
  447.     END IF
  448.     szStart$ = szLine$
  449.     IF iField% <> 1 THEN
  450.         FOR i% = 2 TO iField% STEP 1
  451.             iNew% = INSTR(szStart$, ",")
  452.             IF iNew% = 0 THEN
  453.                 GetNthFieldFromIniString = ""
  454.                 GOTO _GNFFIS_END
  455.             END IF
  456.             szStart$ = MID$(szStart$, (iNew% + 1))
  457.         NEXT
  458.     END IF
  459.  
  460.     iNew% = INSTR(szStart$, ",")
  461.     IF iNew% <> 0 THEN
  462.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  463.     END IF
  464.  
  465.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  466.  
  467. _GNFFIS_END:
  468.  
  469. END FUNCTION
  470.  
  471.  
  472. '*************************************************************************
  473. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  474. '$ifdef DEBUG
  475.     if FValidInfSect(szSect$) = 0 then
  476.         n% = 1
  477.     elseif szKey$ = "" then
  478.         n% = 2
  479.     else
  480.         n% = 0
  481.     end if
  482.     if n% > 0 then
  483.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  484.     end if
  485. '$endif ''DEBUG
  486.  
  487.     szBuf$ = string$(128, 32)
  488.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  489.     IF Length% >= 128 THEN
  490.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  491.         ERROR STFERR
  492.     END IF
  493.  
  494.     IF Length% = -1 THEN
  495. '$ifdef DEBUG
  496.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  497. '$endif ''DEBUG
  498.         ERROR STFERR
  499.     END IF
  500.  
  501.     GetSectionKeyFilename = szBuf$
  502.     szBuf$ = ""
  503. END FUNCTION
  504.  
  505.  
  506. '*************************************************************************
  507. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  508. '$ifdef DEBUG
  509.     if FValidInfSect(szSect$) = 0 then
  510.         n% = 1
  511.     elseif szKey$ = "" then
  512.         n% = 2
  513.     else
  514.         n% = 0
  515.     end if
  516.     if n% > 0 then
  517.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  518.     end if
  519. '$endif ''DEBUG
  520.  
  521.     szBuf$ = string$(128, 32)
  522.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  523.     IF Length% >= 128 THEN
  524.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  525.         ERROR STFERR
  526.     END IF
  527.  
  528.     IF Length% = -1 THEN
  529. '$ifdef DEBUG
  530.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  531. '$endif ''DEBUG
  532.         ERROR STFERR
  533.     END IF
  534.  
  535.     GetSectionKeyVersion = szBuf$
  536.     szBuf$ = ""
  537. END FUNCTION
  538.  
  539. '*************************************************************************
  540. SUB AddListItem(szSymbol$, szItem$) STATIC
  541.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  542.         ERROR STFERR
  543.     END IF
  544. END SUB
  545.  
  546.  
  547. '*************************************************************************
  548. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  549.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  550.         ERROR STFERR
  551.     END IF
  552. END SUB
  553.  
  554.  
  555. '*************************************************************************
  556. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  557.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  558.         ERROR STFERR
  559.     END IF
  560. END SUB
  561.  
  562.  
  563. '*************************************************************************
  564. SUB RemoveSymbol(szSym$) STATIC
  565.     IF FRemoveSymbol(szSym$) = 0 THEN
  566.         ERROR STFERR
  567.     END IF
  568. END SUB
  569.  
  570.  
  571. '*************************************************************************
  572. FUNCTION ShowWaitCursor STATIC AS INTEGER
  573.     ShowWaitCursor = HShowWaitCursor
  574. END FUNCTION
  575.  
  576.  
  577. '*************************************************************************
  578. SUB RestoreCursor (hPrev%) STATIC
  579.     i% = FRestoreCursor(hPrev%)
  580.     IF i% = 0 THEN
  581.         ERROR STFERR
  582.     END IF
  583. END SUB
  584.  
  585.  
  586. '*************************************************************************
  587. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  588.     SetBeepingMode = FSetBeepingMode(mode%)
  589. END FUNCTION
  590.  
  591.  
  592. '*************************************************************************
  593. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  594.     SetSilentMode = FSetSilent(mode%)
  595. END FUNCTION
  596.  
  597.  
  598. '*************************************************************************
  599. SUB InitInstall STATIC
  600.     IF hSetup > 0 THEN
  601.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  602.         END
  603.     END IF
  604. END SUB
  605.  
  606. '*************************************************************************
  607. SUB CreateDir (szDir$, cmo%) STATIC
  608.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  609.           ERROR STFERR
  610.     END IF
  611. END SUB
  612.  
  613.  
  614.  
  615. '*************************************************************************
  616. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  617.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  618.         ERROR STFERR
  619.     END IF
  620. END SUB
  621.  
  622.  
  623. '*************************************************************************
  624. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  625.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  626.         ERROR STFERR
  627.     END IF
  628. END SUB
  629.  
  630.  
  631. '*************************************************************************
  632. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  633.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  634.         ERROR STFERR
  635.     END IF
  636. END SUB
  637.  
  638.  
  639. '*************************************************************************
  640. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  641.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  642.         ERROR STFERR
  643.     END IF
  644. END SUB
  645.  
  646.  
  647. '*************************************************************************
  648. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  649.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  650.         ERROR STFERR
  651.     END IF
  652. END SUB
  653.  
  654.  
  655. '*************************************************************************
  656. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  657.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  658.         ERROR STFERR
  659.     END IF
  660. END SUB
  661.  
  662.  
  663. '*************************************************************************
  664. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  665.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  666.         ERROR STFERR
  667.     END IF
  668. END SUB
  669.  
  670.  
  671. '*************************************************************************
  672. SUB DumpCopyList (szFile$) STATIC
  673.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  674.         ERROR STFERR
  675.     END IF
  676. END SUB
  677.  
  678.  
  679. '*************************************************************************
  680. SUB ClearCopyList STATIC
  681.     ResetCopyList
  682. END SUB
  683.  
  684.  
  685. '*************************************************************************
  686. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  687.     szItemNew$ = szItem$
  688.     IF szOther$ <> "" THEN
  689.         szItemNew$ = szItem$ + "," + szOther$
  690.     END IF
  691.  
  692.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  693.         ERROR STFERR
  694.     END IF
  695.     szItemNew$ = ""
  696. END SUB
  697.  
  698.  
  699. '*************************************************************************
  700. SUB CopyFilesInCopyList STATIC
  701.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  702.  
  703.     IF grc% = grcUserQuit THEN
  704.         ERROR STFQUIT
  705.     ELSEIF grc% > 0 THEN
  706.         ERROR STFERR
  707.     END IF
  708. END SUB
  709.  
  710.  
  711. '*************************************************************************
  712. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  713.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  714.         ERROR STFERR
  715.     END IF
  716. END SUB
  717.  
  718. '*************************************************************************
  719. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  720. '$ifdef DEBUG
  721.     if FValidInfSect(szSect$) = 0 then
  722.         n% = 1
  723.     elseif szKey$ = "" then
  724.         n% = 2
  725.     elseif FValidFATDir(szSrc$) = 0 then
  726.         n% = 3
  727.     elseif FValidFATPath(szDest$) = 0 then
  728.         n% = 4
  729.     else
  730.         n% = 0
  731.     end if
  732.     if n% > 0 then
  733.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  734.     end if
  735. '$endif ''DEBUG
  736.  
  737.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  738. '$ifdef DEBUG
  739.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  740. '$endif ''DEBUG
  741.         ERROR STFERR
  742.     END IF
  743. END SUB
  744.  
  745. '*************************************************************************
  746. SUB OpenLogFile (szFile$, fAppend%) STATIC
  747.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  748.         ERROR STFERR
  749.     END IF
  750. END SUB
  751.  
  752.  
  753. '*************************************************************************
  754. SUB CloseLogFile STATIC
  755.     IF FCloseLogFile() = 0 THEN
  756.         ERROR STFERR
  757.     END IF
  758. END SUB
  759.  
  760.  
  761. '*************************************************************************
  762. SUB WriteToLogFile (szStr$) STATIC
  763.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  764.         ERROR STFERR
  765.     END IF
  766. END SUB
  767.  
  768. '*************************************************************************
  769. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  770.     szBuf$ = STRING$(512, 32)
  771.  
  772.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  773.     IF wRet% = 0 THEN
  774.         FindFileUsingFileOpen = szBuf$
  775.     ELSEIF wRet% = 1 THEN
  776.         FindFileUsingFileOpen = ""
  777.     ELSE
  778. '$ifdef DEBUG
  779.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  780. '$endif ''DEBUG
  781.         ERROR STFERR
  782.     END IF
  783.  
  784.     szBuf$ = ""
  785. END FUNCTION
  786.  
  787. '*************************************************************************
  788. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  789.     IsDirWritable = FIsDirWritable(szDir$)
  790. END FUNCTION
  791.  
  792. '*************************************************************************
  793. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  794. '$ifdef DEBUG
  795.     if FValidFATDir(szFile$) = 0 then
  796.         BadArgErr 1, "IsFileWritable", szFile$
  797.     end if
  798. '$endif ''DEBUG
  799.     IsFileWritable = FIsFileWritable(szFile$)
  800. END FUNCTION
  801.  
  802. '*************************************************************************
  803. FUNCTION GetWindowsDir STATIC AS STRING
  804.     szBuf$ = string$(256, 32)
  805.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  806.  
  807.     IF cbBuf% = 0 THEN
  808.         GetWindowsDir = ""
  809.         ERROR STFERR
  810.     ELSE
  811.         IF cbBuf% > 255 THEN
  812.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  813.             ERROR STFERR
  814.         END IF
  815.         szBuf$ = RTRIM$(szBuf$)
  816.         IF MID$(szBuf$, 1, 1) = "\" THEN
  817.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  818.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  819.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  820.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  821.         END IF
  822.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  823.             szBuf$ = szBuf$ + "\"
  824.         END IF
  825.         GetWindowsDir = szBuf$
  826.     END IF
  827.  
  828.     szBuf$ = ""
  829. END FUNCTION
  830.  
  831. '*************************************************************************
  832. FUNCTION IsWindowsShared STATIC AS INTEGER
  833.     szWin$ = UCASE$(GetWindowsDir())
  834.     szSys$ = UCASE$(GetWindowsSysDir())
  835.  
  836.     IF len(szWin$) = 0 THEN
  837. '$ifdef DEBUG
  838.         StfApiErr saeFail, "IsWindowsShared", ""
  839. '$endif ''DEBUG
  840.         ERROR STFERR
  841.     END IF
  842.  
  843.     IF len(szSys$) <= len(szWin$) THEN
  844.         IsWindowsShared = 1
  845.     ELSE
  846.         szSys$ = MID$(szSys$, 1, len(szWin$))
  847.         IF szWin$ = szSys$ THEN
  848.             IsWindowsShared = 0
  849.         ELSE
  850.             IsWindowsShared = 1
  851.         END IF
  852.     END IF
  853. END FUNCTION
  854.  
  855. '*************************************************************************
  856. FUNCTION GetWindowsSysDir STATIC AS STRING
  857.     szBuf$ = string$(256, 32)
  858.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  859.  
  860.     IF cbBuf% = 0 THEN
  861.         ERROR STFERR
  862.     ELSE
  863.         IF cbBuf% > 255 THEN
  864.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  865.             ERROR STFERR
  866.         END IF
  867.         szBuf$ = RTRIM$(szBuf$)
  868.         IF MID$(szBuf$, 1, 1) = "\" THEN
  869.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  870.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  871.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  872.         END IF
  873.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  874.             szBuf$ = szBuf$ + "\"
  875.         END IF
  876.         GetWindowsSysDir = szBuf$
  877.     END IF
  878.  
  879.     szBuf$ = ""
  880. END FUNCTION
  881.  
  882.  
  883. '*************************************************************************
  884. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  885.  
  886.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  887.         ERROR STFERR
  888.     END IF
  889. END SUB
  890.  
  891.  
  892.  
  893. '**************************************************************************
  894. '***************************  Error Handlers  *****************************
  895. '**************************************************************************
  896.  
  897.  
  898. TRAP CleanupTrap From "MSSHLSTF.DLL"
  899.  
  900. End Trap
  901.  
  902. hSetup = InitSetup(COMMAND$)
  903.  
  904. ON ERROR GOTO QUIT
  905.  
  906.